home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
QRZ! Ham Radio 8
/
QRZ Ham Radio Callsign Database - Volume 8.iso
/
pc
/
files
/
t_sys5
/
unixkit.tgz
/
unixkit.tar
/
unixkit
/
tundrvr
/
tund
/
lcd.c
< prev
next >
Wrap
C/C++ Source or Header
|
1989-02-24
|
16KB
|
678 lines
/* lcd.c - log cause and diagnostic bytes */
#ifndef lint
static char Rcsid[] = "@(#) $Header: lcd.c,v 1.3 88/07/11 08:28:54 jpo Exp $";
#endif
/*
* $Header: lcd.c,v 1.3 88/07/11 08:28:54 jpo Exp $
*
* This routine shamelessly stolen from ISODE. I think John Pavel must be
* creditted with this routine.
*
* $Log: lcd.c,v $
* Revision 1.3 88/07/11 08:28:54 jpo
* Some tidying up
*
* Revision 1.2 87/11/04 15:07:19 jpo
* Touch up
*
*
* Revision 1.1 87/11/04 14:43:52 jpo
* Initial revision
*
*
*/
#include "tund.h"
int log_cause_and_diag(fd)
int fd;
{
X25_CAUSE_DIAG diag;
if (ioctl(fd, X25_RD_CAUSE_DIAG, &diag) < 0) {
advise ("ioctl", LOG_INFO, "X25_RD_CAUSE_DIAG failed");
return NOTOK;
}
#ifdef DEBUG
advise (NULLCP, LOG_DEBUG, "Call cleared");
#endif
if (diag.flags & (1 << RECV_DIAG)) {
advise (NULLCP, LOG_INFO, "call %s: 0x%2x 0x%2x",
((diag.flags) & (1 << DIAG_TYPE)) ? "cleared"
: "reset",
diag.data[0], diag.data[1]);
if ((diag.flags) & (1 << DIAG_TYPE)) /* cleared */
switch(diag.data[0]) {
case 0x00:
advise(NULLCP, LOG_INFO, "clearing cause DTE Clearing");
break;
case 0x01:
advise(NULLCP, LOG_INFO, "clearing cause Number Busy");
break;
case 0x09:
advise(NULLCP, LOG_INFO, "clearing cause Out of Order");
break;
case 0x11:
advise(NULLCP, LOG_INFO, "clearing cause Remote Procedure Error");
break;
case 0x19:
advise(NULLCP, LOG_INFO, "clearing cause Reverse Charging not subscribed");
break;
case 0x03:
advise(NULLCP, LOG_INFO, "clearing cause Invalid Facility Request");
break;
case 0x0B:
advise(NULLCP, LOG_INFO, "clearing cause Access Barred");
break;
case 0x13:
advise(NULLCP, LOG_INFO, "clearing cause Local Procedure Error");
break;
case 0x05:
advise(NULLCP, LOG_INFO, "clearing cause Network Congestion");
break;
case 0x0D:
advise(NULLCP, LOG_INFO, "clearing cause Not Obtainable");
break;
case 0x21:
advise(NULLCP, LOG_INFO, "clearing cause DTE Incompatible Call");
break;
case 0x29:
advise(NULLCP, LOG_INFO, "clearing cause Fast Select Acceptance not Subscribed");
break;
default:
advise(NULLCP, LOG_INFO, "clearing cause 0x2%x", diag.data[0]);
break;
}
else /* reset */
switch(diag.data[0]) {
case 0x00:
advise(NULLCP, LOG_INFO, "resetting cause DTE Reset");
break;
case 0x01:
advise(NULLCP, LOG_INFO, "resetting cause Out of Order (PVC Only)");
break;
case 0x03:
advise(NULLCP, LOG_INFO, "resetting cause Remote Procedure Error");
break;
case 0x05:
advise(NULLCP, LOG_INFO, "resetting cause Local Procedure Error");
break;
case 0x07:
advise(NULLCP, LOG_INFO, "resetting cause Network Congestion");
break;
case 0x09:
advise(NULLCP, LOG_INFO, "resetting cause Remote DTE Operational (PVC Only)");
break;
case 0x0F:
advise(NULLCP, LOG_INFO, "resetting cause Network Operational (PVC Only");
break;
default:
advise(NULLCP, LOG_INFO, "resetting cause 0x%2x", diag.data[0]);
break;
}
/* The following may only be applicable to PSS in the UK */
/* In any case, if someone is keen, they can stuff it all
into a text file and read it out */
switch (diag.data[1]) {
case 0x00:
advise(NULLCP, LOG_INFO, "diagnostic NO ADDITIONAL INFORMATION");
break;
case 0x01:
advise(NULLCP, LOG_INFO, "diagnostic INVALID P(S)\tRESET");
break;
case 0x02:
advise(NULLCP, LOG_INFO, "diagnostic INVALID P(R)\tRESET");
break;
case 0x11:
advise(NULLCP, LOG_INFO, "diagnostic PACKET TYPE INVALID FOR STATE r1\tRESTART");
break;
case 0x12:
advise(NULLCP, LOG_INFO, "diagnostic PACKET TYPE INVALID FOR STATE r2\tRESTART");
break;
case 0x13:
advise(NULLCP, LOG_INFO, "diagnostic PACKET TYPE INVALID FOR STATE r3\tRESTART");
break;
case 0x14:
advise(NULLCP, LOG_INFO, "diagnostic PACKET TYPE INVALID FOR STATE p1\tCLEAR");
break;
case 0x15:
advise(NULLCP, LOG_INFO, "diagnostic PACKET TYPE INVALID FOR STATE p2\tCLEAR");
break;
case 0x16:
advise(NULLCP, LOG_INFO, "diagnostic PACKET TYPE INVALID FOR STATE p3\tCLEAR");
break;
case 0x17:
advise(NULLCP, LOG_INFO, "diagnostic PACKET TYPE INVALID FOR STATE p4\tCLEAR");
break;
case 0x18:
advise(NULLCP, LOG_INFO, "diagnostic PACKET TYPE INVALID FOR STATE p5\tRESET");
break;
case 0x19:
advise(NULLCP, LOG_INFO, "diagnostic PACKET TYPE INVALID FOR STATE p6\tCLEAR");
break;
case 0x1A:
advise(NULLCP, LOG_INFO, "diagnostic PACKET TYPE INVALID FOR STATE p7\tCLEAR");
break;
case 0x1B:
advise(NULLCP, LOG_INFO, "diagnostic PACKET TYPE INVALID FOR STATE d1\tRESET");
break;
case 0x1C:
advise(NULLCP, LOG_INFO, "diagnostic PACKET TYPE INVALID FOR STATE d2\tRESET");
break;
case 0x1D:
advise(NULLCP, LOG_INFO, "diagnostic PACKET TYPE INVALID FOR STATE d3\tRESET");
break;
case 0x20:
advise(NULLCP, LOG_INFO, "diagnostic PACKET NOT ALLOWED");
break;
case 0x21:
advise(NULLCP, LOG_INFO, "diagnostic UNIDENTIFIABLE PACKET");
break;
case 0x22:
advise(NULLCP, LOG_INFO, "diagnostic CALL ON ONE-WAY LOGICAL CHANNEL\tCLEAR");
break;
case 0x23:
advise(NULLCP, LOG_INFO, "diagnostic INVALID PACKET TYPE ON PVC\tRESET");
break;
case 0x24:
advise(NULLCP, LOG_INFO, "diagnostic PACKET ON UNASSIGNED LCN\tCLEAR");
break;
case 0x25:
advise(NULLCP, LOG_INFO, "diagnostic REJECT NOT SUBSCRIBED TO\tRESET");
break;
case 0x26:
advise(NULLCP, LOG_INFO, "diagnostic PACKET TOO SHORT\tRESET");
break;
case 0x27:
advise(NULLCP, LOG_INFO, "diagnostic PACKET TOO LONG\tRESET");
break;
case 0x28:
advise(NULLCP, LOG_INFO, "diagnostic INVALID GFI\tCLEAR");
break;
case 0x29:
advise(NULLCP, LOG_INFO, "diagnostic RESTART WITH NON-ZERO BITS 5-16");
break;
case 0x2A:
advise(NULLCP, LOG_INFO, "diagnostic PACKET TYPE NOT COMPATIBLE WITH FACILITY\tCLEAR");
break;
case 0x2B:
advise(NULLCP, LOG_INFO, "diagnostic UNAUTHORISED INTERRUPT CONF\tRESET");
break;
case 0x2C:
advise(NULLCP, LOG_INFO, "diagnostic UNAUTHORISED INTERRUPT\tRESET");
break;
case 0x31:
advise(NULLCP, LOG_INFO, "diagnostic TIMER EXPIRED; INCOMING CALL");
break;
case 0x32:
advise(NULLCP, LOG_INFO, "diagnostic TIMER EXPIRED;\tCLEAR INDICATION");
break;
case 0x33:
advise(NULLCP, LOG_INFO, "diagnostic TIMER EXPIRED;\tRESET INDICATION");
break;
case 0x34:
advise(NULLCP, LOG_INFO, "diagnostic TIMER EXPIRED;\tRESTART IND");
break;
case 0x40:
advise(NULLCP, LOG_INFO, "diagnostic UNSPECIFIED CALL SET-UP PROBLEM CLEAR");
break;
case 0x41:
advise(NULLCP, LOG_INFO, "diagnostic FACILITY CODE NOT ALLOWED\tCLEAR");
break;
case 0x42:
advise(NULLCP, LOG_INFO, "diagnostic FACILITY PARAMETER NOT ALLOWED\tCLEAR");
break;
case 0x43:
advise(NULLCP, LOG_INFO, "diagnostic INVALID CALLED ADDRESS\tCLEAR");
break;
case 0x44:
advise(NULLCP, LOG_INFO, "diagnostic INVALID CALLING ADDRESS\tCLEAR");
break;
case 0x90:
advise(NULLCP, LOG_INFO, "diagnostic DTE/DCE CONGESTION\tRESET");
break;
case 0x91:
advise(NULLCP, LOG_INFO, "diagnostic RECEIVED FAST SELECT CLEAR REQUEST");
break;
case 0x92:
advise(NULLCP, LOG_INFO, "diagnostic LINE RESTARTING BY INMC COMMAND\tRESTART");
break;
case 0xA0:
advise(NULLCP, LOG_INFO, "diagnostic NON-ZERO RESET CAUSE FROM DTE\tRESET");
break;
case 0xA1:
advise(NULLCP, LOG_INFO, "diagnostic DATA PACKET TOO LONG\tRESET");
break;
case 0xA2:
advise(NULLCP, LOG_INFO, "diagnostic INTERRUPT PACKET TOO LONG\tRESET");
break;
case 0xA3:
advise(NULLCP, LOG_INFO, "diagnostic INT PACKET TOO SHORT; NO USER DATA\tRESET");
break;
case 0xA4:
advise(NULLCP, LOG_INFO, "diagnostic INT CONFIRMATION PACKET TOO LONG\tRESET");
break;
case 0xA5:
advise(NULLCP, LOG_INFO, "diagnostic RR PACKET TOO LONG\tRESET");
break;
case 0xA6:
advise(NULLCP, LOG_INFO, "diagnostic RNR PACKET TOO LONG\tRESET");
break;
case 0xA7:
advise(NULLCP, LOG_INFO, "diagnostic RESET PACKET TOO LONG\tRESET");
break;
case 0xA8:
advise(NULLCP, LOG_INFO, "diagnostic RESET CONF PACKET TOO LONG\tRESET");
break;
case 0xA9:
advise(NULLCP, LOG_INFO, "diagnostic INVALID `Q' BIT IN DATA PACKET\tRESET");
break;
case 0xAA:
advise(NULLCP, LOG_INFO, "diagnostic PACKET WINDOW RANGE EXCEEDED\tRESET");
break;
case 0xAB:
advise(NULLCP, LOG_INFO, "diagnostic UNABLE TO TRANSMIT PACKET\tRESET");
break;
case 0xAC:
advise(NULLCP, LOG_INFO, "diagnostic `Q' BIT SET IN NON-DATA PACKET\tRESET");
break;
case 0xAD:
advise(NULLCP, LOG_INFO, "diagnostic OUTSTANDING PACKET COUNT LESS THAN ZERO\tRESET");
break;
case 0xAE:
advise(NULLCP, LOG_INFO, "diagnostic RETRANSMISSION ERROR\tRESET");
break;
case 0xAF:
advise(NULLCP, LOG_INFO, "diagnostic RESET PACKET TOO SHORT (NO CAUSE)\tRESET");
break;
case 0xB0:
advise(NULLCP, LOG_INFO, "diagnostic REJECT PACKET TOO LONG\tRESET");
break;
case 0xB1:
advise(NULLCP, LOG_INFO, "diagnostic INVALID 1D PACKET\tRESET");
break;
case 0xB2:
advise(NULLCP, LOG_INFO, "diagnostic UNSUCCESSFUL RECONNECTION RESNC\tCLEAR");
break;
case 0xB3:
advise(NULLCP, LOG_INFO, "diagnostic NON-RECONNECT CALL IN STATE C1\tCLEAR");
break;
case 0xB4:
advise(NULLCP, LOG_INFO, "diagnostic SECOND 1D PACKET FROM DTE\tCLEAR");
break;
case 0xB5:
advise(NULLCP, LOG_INFO, "diagnostic BAD DATA TRANSFER STATE IN RECONNECT\tCLEAR");
break;
case 0xB6:
advise(NULLCP, LOG_INFO, "diagnostic PACKET FORMAT INVALID\tCLEAR");
break;
case 0xB7:
advise(NULLCP, LOG_INFO, "diagnostic FACILITY BYTE COUNT TOO LARGE\tCLEAR");
break;
case 0xB8:
advise(NULLCP, LOG_INFO, "diagnostic INVALID PACKET DETECTED\tCLEAR");
break;
case 0xB9:
advise(NULLCP, LOG_INFO, "diagnostic FACILITY/UTILITY FIELD BYTE COUNT > 63\tCLEAR");
break;
case 0xBA:
advise(NULLCP, LOG_INFO, "diagnostic OUTGOING CALLS BARRED\tCLEAR");
break;
case 0xBB:
advise(NULLCP, LOG_INFO, "diagnostic INCOMING CALLS BARRED\tCLEAR");
break;
case 0xBC:
advise(NULLCP, LOG_INFO, "diagnostic CLEARING OF PVC\tCLEAR");
break;
case 0xBD:
advise(NULLCP, LOG_INFO, "diagnostic CALLED ADDRESS TOO LONG\tCLEAR");
break;
case 0xBE:
advise(NULLCP, LOG_INFO, "diagnostic CALLED ADDRESS TOO SHORT\tCLEAR");
break;
case 0xBF:
advise(NULLCP, LOG_INFO, "diagnostic CALLING ADDRESS TOO LONG\tCLEAR");
break;
case 0xC0:
advise(NULLCP, LOG_INFO, "diagnostic CALLING ADDRESS TOO SHORT\tCLEAR");
break;
case 0xC1:
advise(NULLCP, LOG_INFO, "diagnostic BCD ERROR IN CALL ADDRESS\tCLEAR");
break;
case 0xC2:
advise(NULLCP, LOG_INFO, "diagnostic BCD ERROR IN CALLING ADDRESS\tCLEAR");
break;
case 0xC3:
advise(NULLCP, LOG_INFO, "diagnostic USER DATA FIELD TOO LONG\tCLEAR");
break;
case 0xC4:
advise(NULLCP, LOG_INFO, "diagnostic NO BUFFER AVAILABLE\tCLEAR");
break;
case 0xC5:
advise(NULLCP, LOG_INFO, "diagnostic LOCAL DTE IS NOT ENHANCED\tCLEAR");
break;
case 0xC6:
advise(NULLCP, LOG_INFO, "diagnostic FACILITY NEGOTIATION INVALID\tCLEAR");
break;
case 0xC7:
advise(NULLCP, LOG_INFO, "diagnostic MANDATORY UTILITY NOT INPUT\tCLEAR");
break;
case 0xC8:
advise(NULLCP, LOG_INFO, "diagnostic BUFFER NO AVAILABLE FOR TNIC\tCLEAR");
break;
case 0xC9:
advise(NULLCP, LOG_INFO, "diagnostic OVERFLOW OF TNIC IN BUFFER\tCLEAR");
break;
case 0xCA:
advise(NULLCP, LOG_INFO, "diagnostic DTE LINECONGESTED\tCLEAR");
break;
case 0xCB:
advise(NULLCP, LOG_INFO, "diagnostic TABLE ERROR IN PACKET PROCEDURES");
break;
case 0xCC:
advise(NULLCP, LOG_INFO, "diagnostic INSERT TABLE OVERFLOW");
break;
case 0xCD:
advise(NULLCP, LOG_INFO, "diagnostic DELETE TABLE OVERFLOW");
break;
case 0xD0:
advise(NULLCP, LOG_INFO, "diagnostic TRUNK LINE RESTART\tRESTART");
break;
case 0xD1:
advise(NULLCP, LOG_INFO, "diagnostic INVALID EVENT IN STATE p2");
break;
case 0xD2:
advise(NULLCP, LOG_INFO, "diagnostic INVALID EVENT IN STATE p3");
break;
case 0xD3:
advise(NULLCP, LOG_INFO, "diagnostic INVALID 1D EVENT IN STATE d1");
break;
case 0xD4:
advise(NULLCP, LOG_INFO, "diagnostic CALL COLLISION ON TRUNK LINE");
break;
case 0xD5:
advise(NULLCP, LOG_INFO, "diagnostic NO BUFFER AVAILABLE");
break;
case 0xD6:
advise(NULLCP, LOG_INFO, "diagnostic CALL COLLISION ON DTE LINE");
break;
case 0xD7:
advise(NULLCP, LOG_INFO, "diagnostic DTE RESTART");
break;
case 0xD8:
advise(NULLCP, LOG_INFO, "diagnostic CALL REQUEST TO TRUNK LINE TIMEOUT");
break;
case 0xD9:
advise(NULLCP, LOG_INFO, "diagnostic RECONNECT SET-UP TIMED OUT");
break;
case 0xDA:
advise(NULLCP, LOG_INFO, "diagnostic INVALID OUTPUT SIDE STATE");
break;
case 0xDB:
advise(NULLCP, LOG_INFO, "diagnostic ERROR DETECTED IN BLINK PACKET QUEUE PROCEDURE");
break;
case 0xDC:
advise(NULLCP, LOG_INFO, "diagnostic RESET INDICATION RETRANSMISSION COUNT EXPIRED");
break;
case 0xDD:
advise(NULLCP, LOG_INFO, "diagnostic INVALID OUTPUT SIDE STATE");
break;
case 0xDE:
advise(NULLCP, LOG_INFO, "diagnostic BLIND BUFFER QUEUE OVERFLOW IN STATE d4");
break;
case 0xDF:
advise(NULLCP, LOG_INFO, "diagnostic BLIND BUFFER QUEUE OVERFLOW IN STATE c1");
break;
case 0xE0:
advise(NULLCP, LOG_INFO, "diagnostic BLIND BUFFER QUEUE OVERFLOW IN STATE c2");
break;
case 0xE1:
advise(NULLCP, LOG_INFO, "diagnostic CLEAR PACKET BYTE COUNT TOO LARGE OR TOO SMALL");
break;
case 0xE2:
advise(NULLCP, LOG_INFO, "diagnostic NON-ZERO\tCLEAR CAUSE");
break;
case 0xE3:
advise(NULLCP, LOG_INFO, "diagnostic CLEAR CONF PACKET BYTE COUNT TOO SMALL OR TOO LARGE");
break;
case 0xE4:
advise(NULLCP, LOG_INFO, "diagnostic CALL COLLISION");
break;
case 0xE5:
advise(NULLCP, LOG_INFO, "diagnostic INVALID TP LOAD REQUEST CALL PKT");
break;
case 0xE6:
advise(NULLCP, LOG_INFO, "diagnostic MAXIMUM HOPCOUNT EXCEEDED");
break;
case 0xE7:
advise(NULLCP, LOG_INFO, "diagnostic ROUTING LOOP DETECTED");
break;
case 0xE8:
advise(NULLCP, LOG_INFO, "diagnostic PVC CALL REQUEST FAILURE");
break;
case 0xE9:
advise(NULLCP, LOG_INFO, "diagnostic RECONNECT CALL REQUEST FAILED");
break;
case 0xEA:
advise(NULLCP, LOG_INFO, "diagnostic NO LC AVAILABLE ON OUTPUT SIDE");
break;
case 0xEB:
advise(NULLCP, LOG_INFO, "diagnostic NO BUFFER AVAILABLE");
break;
case 0xEC:
advise(NULLCP, LOG_INFO, "diagnostic CALL REDIRECTION CLEAR");
break;
case 0xED:
advise(NULLCP, LOG_INFO, "diagnostic NO PATH ROUTE CALL");
break;
case 0xEE:
advise(NULLCP, LOG_INFO, "diagnostic CALL ROUTED TO DTE LINE");
break;
case 0xEF:
advise(NULLCP, LOG_INFO, "diagnostic CALL CANNOT BE REROUTED");
break;
case 0xF0:
advise(NULLCP, LOG_INFO, "diagnostic ADDRESS NOT IN ROUTING TABLES");
break;
case 0xF1:
advise(NULLCP, LOG_INFO, "diagnostic ROUTING TABLE CHANGE DURING CALL ROUTING");
break;
case 0xF2:
advise(NULLCP, LOG_INFO, "diagnostic NO LC AVAILABLE ON FAKE TRUNK");
break;
case 0xF3:
advise(NULLCP, LOG_INFO, "diagnostic REMOTE DTE DOWN ON A PVC");
break;
case 0xF4:
advise(NULLCP, LOG_INFO, "diagnostic INVALID EVENT DETECTED");
break;
case 0xF5:
advise(NULLCP, LOG_INFO, "diagnostic INVALID PACKET RECEIVED; STATE d4");
break;
case 0xF6:
advise(NULLCP, LOG_INFO, "diagnostic INVALID PACKET RECEIVED; STATE d5");
break;
case 0xF7:
advise(NULLCP, LOG_INFO, "diagnostic INVALID PACKET RECEIVED; STATE p8");
break;
case 0xF8:
advise(NULLCP, LOG_INFO, "diagnostic INTERNAL PROCESSING FAILURE");
break;
case 0xF9:
advise(NULLCP, LOG_INFO, "diagnostic INVALID RESTART INDICATION");
break;
case 0xFA:
advise(NULLCP, LOG_INFO, "diagnostic LINE STATUS CHANGE IN STATE r4");
break;
case 0xFB:
advise(NULLCP, LOG_INFO, "diagnostic INVALID PACKET RECEIVED; STATE r4");
break;
case 0xFC:
advise(NULLCP, LOG_INFO, "diagnostic INVALID PACKET RECEIVED; STATE r3");
break;
case 0xFD:
advise(NULLCP, LOG_INFO, "diagnostic LINE STATUS CHANGE IN STATE r2");
break;
case 0xFE:
advise(NULLCP, LOG_INFO, "diagnostic LINE STATUS CHANGE IN STATE r1");
break;
case 0xFF:
advise(NULLCP, LOG_INFO, "diagnostic LINE STATUS CHANGE IN STATE r0");
break;
default:
advise(NULLCP, LOG_INFO, "diagnostic: 0x%2x", diag.data[1]);
break;
}
}
else /* Not RECV_DIAG */
if (diag.flags)
advise (NULLCP, LOG_INFO, "diag flags: 0x%2x", diag.flags);
return 0;
}